#include "unistd.h"
#include "stdio.h"
#include "sys/types.h"

int main(int argc, char const *argv[])
{
    printf("main进程(%d)开始执行\n",getpid());

    int num = 100;

    //创建子进程
    /*
    fork内部创建根据当前进程,来创建一个子进程  (拷贝一份当前进程的内存,作为子进程的内存)
        子进程创建完成后,内核会依次执行父进程和子进程
        当选择父进程执行时,fork返回值为子进程的pid
        当选择子进程执行时,fork返回值为0


    程序计数器:可以看作一个内部变量,记录的是当前程序执行到的位置
    */
    pid_t pid = fork();
    if(pid == -1){
        printf("创建子进程失败\n");
        return -1;
    }
    else if(pid == 0)//当前执行的是子进程
    {
        num++;
        printf("子进程(%d)开始执行,父进程id=%d,num=%d,num地址=%d\n"
        ,getpid(),getppid(),num,&num);
    }
    else//当前进行的是父进程,(main)
    {
        num--;
        printf("父进程(%d)正在执行,子进程id=%d,num=%d,num地址=%d\n"
        ,getpid(),pid,num,&num);
    }

    printf("进程(%d)将执行结束\n",getpid());
    printf("-----------------\n");
    return 0;
}
